home *** CD-ROM | disk | FTP | other *** search
- /* File: ~eden/Kernel/DataStructs/sunQueInst.c */
-
- /*
- * Queueing routines for Eden Kernel on SUNs.
- * 68010s don't have a set of noninterruptible queue
- * instructions, so we have to fake it by holding
- * signals.
- */
-
- /*
- **********************************************************************
- * HISTORY
- * 27-Jun-84 Initial implementation.
- **********************************************************************
- */
-
- #include "Kernel/h/stdTypes.h"
- #include "Kernel/h/kEvents.h"
-
-
-
- void enqueue( fHead, fElt )
- register struct Queue *fHead;
- register struct Queue *fElt;
- {
- HoldSigs();
-
- fElt->F = fHead;
- fElt->B = fHead->B;
- fHead->B = fElt;
- (fElt->B)->F = fElt;
-
- ReleaseSigs();
- }
-
- void remqueue( fHead, fElt )
- register struct Queue *fHead;
- register struct Queue *fElt;
- {
- if ( fHead != fElt ) {
-
- HoldSigs();
-
- (fElt->B)->F = fElt->F;
- (fElt->F)->B = fElt->B;
-
- ReleaseSigs();
-
- }
- }
-
- struct Queue *dequeue( fHead )
- register struct Queue *fHead;
- {
- register struct Queue *q_tmp;
-
-
- HoldSigs();
-
- q_tmp = fHead->F;
- if (q_tmp == fHead ) {
-
- ReleaseSigs();
-
- return( (struct Queue *) 0 );
- }
- (q_tmp->B)->F = q_tmp->F;
- (q_tmp->F)->B = q_tmp->B;
-
- ReleaseSigs();
-
- return( q_tmp );
- }
-
- Boolean queueempty( fHead )
- register struct Queue *fHead;
- {
- register Boolean b;
-
- HoldSigs();
-
- b = fHead->F == fHead;
-
- ReleaseSigs();
- return( b );
- }
-
- void initqueue( fHead )
- register struct Queue *fHead;
- {
- fHead->F = fHead;
- fHead->B = fHead;
- }
-